package com.lmf.mvc.webAppInitializer;

import com.lmf.mvc.config.AppConfig;
import com.lmf.mvc.config.RootConfig;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

/**
 * 注册中央调度器的方式二：（推荐这种）
 *
 * 父子容器方法，根容器，web容器的解释：
 *    （1）  根容器：Spring的IOC容器，但是不直接包括servlet程序
 *          web容器：即，SpringMVC的容器，用于存放servlet程序，且是IOC容器的子容器
 *
 *   （2） web容器：也即子容器，又叫tomcat容器，只来扫描controller控制层组件（一般不包含核心业务逻辑，只有数据校验和视图渲染等工作）与视图解析器等等
 *        根容器：父容器，扫描业务逻辑核心组件，包括不同的数据源等等
 */
public class MyAbstractAnnotationConfigDispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    /**
     * 它是来获取根容器的配置类的，该配置类就类似于我们以前经常写的Spring的配置文件，
     * 而且我们以前是利用监听器的方式来读取Spring的配置文件
     *
     * 获取根容器的配置类，该配置类就类似于我们以前经常写的Spring的配置文件，然后创建出一个父容器，即IOC容器
     * @return
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{RootConfig.class};
    }

    /**
     * 它是来获取web容器的配置类的，该配置类就类似于我们以前经常写的Spring MVC的配置文件，即SringMVC容器
     * 而且我们以前是利用前端控制器来加载Spring MVC的配置文件
     *
     * 获取web容器的配置类，该配置类就类似于我们以前经常写的Spring MVC的配置文件，然后创建出一个子容器，又叫tomcat容器
     * @return
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{AppConfig.class};
    }

    /**
     * 获取DispatcherServlet的映射信息
     * 它是来获取DispatcherServlet的映射信息的。该方法需要返回一个String[]，如果我们返回的是这样一个new String[]{"/"}
     */
    /**
     *  /：拦截所有请求，包括静态资源，比如xxx.js文件、xxx.png等等等等，但是不包括*.jsp，也即不会拦截所有的jsp页面
     *  /*：真正来拦截所有请求了，包括*.jsp，也就是说就连jsp页面都拦截
     */
    @Override
    protected String[] getServletMappings() {
        //用斜杠，后面一般不加*，否则静态资源也会被拦截
        //拦截所有请求
        return new String[]{"/"};
    }
}
